package com.atguigu.lease.common.result;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    private Integer code;
    private String message;
    private T data;
    private Boolean ok;

    //为了快速创建Result对象，可以提供静态方法，快速创建成功或者失败的Result对象
    // 200 success , 201 未知错误 ， 202 账号错误  203 密码错误 204 账号被禁用
    // 可以使用枚举类将 不同状态码的 响应状态和描述信息封装为一个个的枚举对象，以后使用方便
    public static <T> Result<T> build(T data  ,ResultCodeEnum resultCodeEnum) {
        return new Result<>(resultCodeEnum.getCode(),
                resultCodeEnum.getMessage(),
                data ,
                resultCodeEnum.getOk());
    }
    public static <T> Result<T> build(T data  ,Integer code,String message , Boolean ok) {
        return new Result<>(code,
                message,
                data ,
                ok);
    }
    //成功的响应 创建成功Result对象的方法
    public static<T> Result<T> ok(T data) {
        return Result.build(data,ResultCodeEnum.SUCCESS);
    }
    public static<T> Result<T> ok() {
        return Result.build(null,ResultCodeEnum.SUCCESS);
    }
    //失败的响应 创建默认失败Result对象的方法
    public static<T> Result<T> error() {
        return Result.build(null,ResultCodeEnum.ERROR);
    }
    public static<T> Result<T> error(ResultCodeEnum resultCodeEnum) {
        return Result.build(null,resultCodeEnum);
    }


//    public static void main(String[] args) {
//        System.out.println("Result.build(\"hehe\" , ResultCodeEnum.ERROR) = " +
//                Result.build("hehe", ResultCodeEnum.ERROR));
//    }
}
